package ucla.axelia.reportes;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import ucla.axelia.controlador.interfaces.IServicioAdministracionReporteProgramaInicioFin;
import ucla.axelia.modelo.data.Programa;

import nextapp.echo2.app.Column;
import nextapp.echo2.app.Extent;

import com.obelisco.exception.ObeliscoException;
import com.obelisco.vista.componentes.ContenedorReporte;
import com.obelisco.vista.controles.BindingDateField;
import com.obelisco.vista.controles.Grid;
import com.obelisco.vista.controles.Label;
import com.obelisco.vista.controles.SelectField;

public class ContenedorReporteProgramaInicioFin extends ContenedorReporte {
	
	private SelectField cmbPrograma;
	private IServicioAdministracionReporteProgramaInicioFin servicioAdministracionReporteProgramaInicioFin;
	private BindingDateField fechaDesde;
	private BindingDateField fechaHasta;
	
	private void initComponents(){
		this.removeAll();
		this.setEnabled(true);
		Grid grid = new Grid();
		grid.setStyleName("Obelisco.GridPaneDialogo");
		grid.setSize(2); //Numero de columnas de la tabla
		grid.setColumnWidth(0, new Extent(150, Extent.PX)); //PX denota pixeles
		Label lblPrograma = new Label("Programa");
		cmbPrograma = new SelectField(200);
		grid.add(lblPrograma);
		grid.add(cmbPrograma);
		fechaDesde = new BindingDateField(150);
		fechaHasta = new BindingDateField(150);
		grid.add(new Label("Desde"));
		grid.add(fechaDesde);
		grid.add(new Label("Hasta"));
		grid.add (fechaHasta);
		Column columna = new Column(); // se crea la columna
		columna.add(grid); // se le agrega el grid
		this.add(columna);
	}
	
	
	public Map extraerParametros() {
		Programa programa = (Programa)cmbPrograma.getSelectedItem();
		Map<String, Object> parametros = new HashMap<String,Object>();
		
		parametros.put("idPrograma", programa.getIdPrograma());
		parametros.put("nombrePrograma", programa.getNombrePrograma());
		parametros.put("fechaInicio", fechaDesde.getSelectedDate().getTime());
		parametros.put("fechaFin", fechaHasta.getSelectedDate().getTime());
		
		return parametros;
	}

	@Override
	public void inicializar() {
		initComponents();
		cmbPrograma.inicializarDatos(servicioAdministracionReporteProgramaInicioFin.buscarProgramas(), "nombrePrograma", "idPrograma");
		cmbPrograma.setSelectedIndex(0);
	}

	@Override
	public List realizarBusqueda() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List obtenerLista() {
		return servicioAdministracionReporteProgramaInicioFin.obtenerActividadesPorPrograma(
				(Programa)cmbPrograma.getSelectedItem(), fechaDesde.getSelectedDate().getTime(),
				fechaHasta.getSelectedDate().getTime());
	}

	@Override
	public boolean onValidarDatos() {
		if (cmbPrograma.getSelectedItem() == null)
			throw new ObeliscoException("DEBE SELECCIONAR UN PROGRAMA");

		if (fechaDesde.getSelectedDate().getTime().after(fechaHasta.getSelectedDate().getTime()))
				throw new ObeliscoException("LA FECHA INICIAL DEBE SER ANTERIOR A LA FECHA FINAL");
		
		return true;
	}

	@Override
	public String rutaArchivoReporte() {
		return null;
	}

	
	// Getters y Setters

	public IServicioAdministracionReporteProgramaInicioFin getServicioAdministracionReporteProgramaInicioFin() {
		return servicioAdministracionReporteProgramaInicioFin;
	}

	public void setServicioAdministracionReporteProgramaInicioFin(
			IServicioAdministracionReporteProgramaInicioFin servicioAdministracionReporteProgramaInicioFin) {
		this.servicioAdministracionReporteProgramaInicioFin = servicioAdministracionReporteProgramaInicioFin;
	}

}